package com.iatinspur.learn;

import sun.util.resources.cldr.CalendarData;
import java.util.Map;

/**
 *
 * 10集 讲解类加载器
 * 11集 讲解启动类加载器
 * 12集 讲解扩展类加载器
 * 13集 讲解双亲委派机制
 *
 *      三个类加载器
 *      启动类加载器  BootstrapClassLoader（他加载的最重要的类）    jre/lib        下的jar包  其中最重要的是rt.jar 【String 就是这个类加载器加载的】  由于这个加载器是c++ 所以 String.class.getClassLoader()  是个null
 *      扩展类加载器  ExtensionClassLoader（他的加载器 表示通用但不重要）     jre/lib/ext    java -Dxxx=xxxx  这种方式（具体不记得）可以指定某些包由此类加载器加载包
 *      应用类加载器  ApplicationClassLoader
 *
 *  todo  使用arthas 可以知道哪些类加载器起作用了
 *
 *  todo  【cmd java -h 可以找到  -classpath 可以知道 在启动某个程序的时候 可以手动将某些包直接 加载】
 *
 *  todo 双亲委派机制 保护核心类不被篡改, 减少重复加载的资源开销
 *       原理：向上查找，向下加载
 *      【向上查找】 查找最高级是否被加载
 *      【向下加载】 最高级发现没有加载，就尝试加载，失败后请下级下载
 *      双亲委派不是 代码中的继承关系  他是类中有个parent节点
 *
 *
 * */
public class Learn_10_JVM {
    public static void main(String[] args) {
        // BootstrapClassLoader
        System.out.println(Map.class.getClassLoader());
        // ExtensionClassLoader
        System.out.println(CalendarData.class.getClassLoader());
        // -DmyKey=xxx 得到的
        System.out.println(System.getProperty("myKey"));

    }

}


